const { Product } = require('@models');
const { Op } = require('sequelize');

/**
 * 获取推荐商品列表
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 * @param {Function} next - 下一个中间件
 */
async function getRecommendProducts(req, res, next) {
  try {
    // 查询上架状态的商品，按销量和创建时间排序，限制8个
    const products = await Product.findAll({
      where: {
        status: 1, // 上架状态
        recommend: 1 // 推荐状态
      },
      order: [
        ['sales', 'DESC'],
        ['create_time', 'DESC']
      ],
      limit: 8,
      attributes: ['id', 'name', 'cover', 'price']
    });
    
    res.json({
      code: 200,
      message: 'success',
      data: products
    });
  } catch (err) {
    next(err);
  }
}

/**
 * 获取商品列表
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 * @param {Function} next - 下一个中间件
 */
async function getProducts(req, res, next) {
  try {
    const { page = 1, limit = 10, categoryId, keyword } = req.query;
    
    console.log('获取商品列表请求参数:', req.query);
    
    // 查询条件
    const where = {
      status: 1 // 只查询上架状态的商品
    };
    
    // 如果有分类ID，添加分类条件
    if (categoryId) {
      where.category_id = categoryId;
    }
    
    // 如果有关键词，添加名称和描述的模糊查询
    if (keyword) {
      where[Op.or] = [
        { name: { [Op.like]: `%${keyword}%` } },
        { description: { [Op.like]: `%${keyword}%` } }
      ];
    }
    
    console.log('商品查询条件:', where);
    
    // 计算分页参数
    const offset = (page - 1) * limit;
    
    // 查询商品列表
    const { count, rows: products } = await Product.findAndCountAll({
      where,
      order: [
        ['create_time', 'DESC']
      ],
      offset,
      limit: parseInt(limit),
      attributes: ['id', 'name', 'cover', 'price', 'original_price', 'sales']
    });
    
    console.log(`查询到${count}个商品`);
    
    res.json({
      code: 200,
      message: 'success',
      data: products,
      pagination: {
        total: count,
        page: parseInt(page),
        limit: parseInt(limit)
      }
    });
  } catch (err) {
    console.error('获取商品列表失败:', err);
    res.status(500).json({
      code: 500,
      message: '获取商品列表失败: ' + err.message,
      data: null
    });
  }
}

/**
 * 获取商品详情
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 * @param {Function} next - 下一个中间件
 */
async function getProductDetail(req, res, next) {
  try {
    const { id } = req.params;
    
    const product = await Product.findOne({
      where: {
        id,
        status: 1 // 只查询上架状态的商品
      },
      attributes: [
        'id', 'name', 'cover', 'price', 'original_price', 'sales', 
        'description', 'stock', 'gallery', 'category_id'
      ]
    });
    
    if (!product) {
      return res.status(404).json({
        code: 404,
        message: '商品不存在或已下架'
      });
    }
    
    res.json({
      code: 200,
      message: 'success',
      data: product
    });
  } catch (err) {
    next(err);
  }
}

module.exports = {
  getRecommendProducts,
  getProducts,
  getProductDetail
}; 